package pmsjc.dpi.psaudavel;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;

import pmsjc.dpi.psaudavel.R;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class AntropometricaActivity extends Activity {
	
	GridView grid_main;
	private stru_pessoa pesAntropometrica;
    String psexo;
    private  BuscaWS busca;
    private Boolean DadosAlterados = false;
   
    public String[] str =  new String[] {"0","0","0", "0"};
   
		
	public void PreencheTabela_Abdomen(String sexo){
		ListView list = (ListView) findViewById(R.id.lstAbdomen);
   							
    	ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
    	HashMap<String, String> map = new HashMap<String, String>();
    	map.put("situacao", "NORMAL");
    	
    	if (sexo.contains("F")){
    		map.put("valor", "Até 80 cm");
    	}else{
    		map.put("valor", "Até 94 cm");
    	}
    	
    	mylist.add(map);

    	map = new HashMap<String, String>();
    	map.put("situacao", "RISCO MODERADO");
    	    	
    	if (sexo.contains("F")){
    		map.put("valor", "De 81 a 87 cm");
    	}else{
    		map.put("valor", "De 95 a 101 cm");
    	}
        	
    	mylist.add(map);
    	
    	map = new HashMap<String, String>();
    	map.put("situacao", "RISCO ALTO");
    	
    	if (sexo.contains("F")){
    		map.put("valor", "Maior ou igual a 88 cm");
    	}else{
    		map.put("valor", "Maior ou igual a 102 cm");
    	}
    	
    	mylist.add(map);
    	
    	ListAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.rows,
    	            new String[] {"situacao", "valor"}, new int[] {R.id.TRAIN_CELL, R.id.FROM_CELL});
    	list.setAdapter(mSchedule);    	
    	
	}
	
	public void PreencheTabela(){
		ListView list = (ListView) findViewById(R.id.SCHEDULE);
   	    		
    	ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
    	HashMap<String, String> map = new HashMap<String, String>();
    	map.put("situacao", "ABAIXO DO PESO IDEAL");
    	map.put("valor", "De 0 a 18,5");
    	mylist.add(map);

    	map = new HashMap<String, String>();
    	map.put("situacao", "PESO IDEAL");
    	map.put("valor", "De 18,6 a 24,9");
    	mylist.add(map);
    	
    	map = new HashMap<String, String>();
    	map.put("situacao", "SOBRE PESO");
    	map.put("valor", "De 25 a 29,9");
    	mylist.add(map);
    	
    	map = new HashMap<String, String>();
    	map.put("situacao", "OBESO I");
    	map.put("valor", "De 30 a 34,9");
    	mylist.add(map);
    	
    	map = new HashMap<String, String>();
    	map.put("situacao", "OBESO II");
    	map.put("valor", "De 35 a 39,9");
    	mylist.add(map);
    	
    	map = new HashMap<String, String>();
    	map.put("situacao", "OBESO III");
    	map.put("valor", "De 40 a 999,9");
    	mylist.add(map);
    	
    	ListAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.rows,
    	            new String[] {"situacao", "valor"}, new int[] {R.id.TRAIN_CELL, R.id.FROM_CELL});
    	list.setAdapter(mSchedule); 
    	
	}
	
	public void CarregaDados(){
		
		pesAntropometrica  = PSaudavelActivity.pessoa;
		
		Log.e("carregaDados", "pessoa: " + pesAntropometrica.pessoa_nome);
			
			if ((pesAntropometrica.achou.contains("S")) && ((pesAntropometrica.getPessoa_sexo().contains("F")) || (pesAntropometrica.getPessoa_sexo().contains("M"))))
			{
			
				PreencheTabela();
				PreencheTabela_Abdomen(pesAntropometrica.getPessoa_sexo());
				
		    	Button button = (Button) findViewById(R.id.btnAntropometria);
		       		        
		        button.setOnClickListener(new Button.OnClickListener(){		
		          
		            public void onClick(View v) {
		            	            	
		             	TextView txtaltura = (TextView) findViewById(R.id.txtPAGlic_estatura);
		             	TextView txtpeso = (TextView) findViewById(R.id.txtPAGlic_peso);
		             	TextView txtabdomen = (TextView) findViewById(R.id.txtPAGlic_abdomen);
		
		                //txtaltura.setText(String.valueOf((Double.valueOf((String) txtaltura.getText().toString()) / 100)));
		             	             	
		             	
		             	
		            	if ((txtaltura.length()> 0) && (txtpeso.length()>0) && (txtabdomen.length()>0)){
		         		Log.e("dados alterados:", DadosAlterados.toString());
		            		if (DadosAlterados){
		            			
		            			Double alt = Double.valueOf(txtaltura.getText().toString()) / 100;
		            		
			            		//Salvar 
								String[] res = busca.GravaAbdomemEstatura(pesAntropometrica.pessoa_cpf, txtabdomen.getText().toString().replace(".",","), txtpeso.getText().toString().replace(".", ","), alt.toString().replace(".", ",") );
			            		if (res[0].contains("S")){
			            			retornaDataSistema();
			            			
				            		//Aparece o resultado
				            		ResultadoAntropometica(View.VISIBLE);
				            		 TextView txtResultado = (TextView) findViewById(R.id.txtresantro);
			                   		 txtResultado.setText("Dados da antropometria gravados com sucesso!");
				               		CalculoIMC(txtpeso.getText().toString(), txtaltura.getText().toString());
				               		CalculoABD(pesAntropometrica.getPessoa_sexo());
				             
				               	}else{
			               			//msg erro
				               		
				               	 Toast toast= Toast.makeText(getApplicationContext(),"Erro ao salvar avaliação antropométrica!", Toast.LENGTH_SHORT);  							
								 toast.setGravity(Gravity.TOP, 0, 70);
								 toast.show();
				               	}
			            		DadosAlterados = false;
			            		
		            		}else{
		            			retornaDataSistema();
		            			ResultadoAntropometica(View.VISIBLE);
		            			 TextView txtResultado = (TextView) findViewById(R.id.txtresantro);
		                   		 txtResultado.setText("Dados da antropometria gravados com sucesso!");
			               		CalculoIMC(txtpeso.getText().toString(), txtaltura.getText().toString());
			               		CalculoABD(pesAntropometrica.getPessoa_sexo());
		            		}
		            	}else{
		            		 Toast toast= Toast.makeText(getApplicationContext(), "Preencha estatura, peso e circunferência abdominal!", Toast.LENGTH_SHORT);  							
							 toast.setGravity(Gravity.TOP, 0, 70);
							 toast.show();
		            	}
		            }   	
		        }
		);	
			}else{
				 Toast toast= Toast.makeText(getApplicationContext(),"Não foi possível encontrar esse cadastro, verifique se todos os dados pessoais foram preenchidos!", Toast.LENGTH_SHORT);  							
				 toast.setGravity(Gravity.TOP, 0, 70);
				 toast.show();

			}
	}
	
	
	
	public void InicializaDados(){
		Log.i("Click - Antropometria", "InicializaDados" );
	  	TextView txtaltura = (TextView) findViewById(R.id.txtPAGlic_estatura);
     	TextView txtpeso = (TextView) findViewById(R.id.txtPAGlic_peso);
     	TextView txtabdomen = (TextView) findViewById(R.id.txtPAGlic_abdomen); 
     	 TextView txtResultado = (TextView) findViewById(R.id.txtresantro);
   		 txtResultado.setText("");
   		 
   		 TextView txtdatasistema = (TextView) findViewById(R.id.txtdatasistema);                                                        

     	busca = new BuscaWS();    
     	
     	//String[] str =  new String[] {"0","0","0", "0"};
  	    str = busca.BuscaAbdomemEstatura(PSaudavelActivity.pessoa.pessoa_cpf);
        	
     	txtabdomen.setText(str[0]);                                         
     	
     	//Retirar ponto e virgulas
  	    txtaltura.setText(str[1].replace(",","").replace(".",""));
     	
  	    txtpeso.setText(str[2].replace(",","."));
     	DadosAlterados=false;	    
     	ResultadoAntropometica(View.INVISIBLE);
     	
     	//
     	
     	
     	/*String vDataSistema = str[3];
     	String vTexto = "Informação salva em: ";
     	
    	if (vDataSistema.equals("0")) {
     		txtdatasistema.setText(str[3].replace("0"," ")); }
     		else { 
     			String result = vTexto + vDataSistema;     			
     			txtdatasistema.setText(result);     			 
     			}*/
     	    	
     	
     	//
     	txtaltura.addTextChangedListener(new TextWatcher() {
			
			
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				DadosAlterados =true;				
			}
			
		
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub                                         
				
			}
			
		
			public void afterTextChanged(Editable s) {
				// TODO Auto-generated method stub
				
			}
		});
     	
        txtpeso.addTextChangedListener(new TextWatcher() {
		
		
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			DadosAlterados = true;
			
		}
		
	
		public void beforeTextChanged(CharSequence s, int start, int count,
				int after) {
			// TODO Auto-generated method stub
			
		}
	
		public void afterTextChanged(Editable s) {
			// TODO Auto-generated method stub
			
		}
	});
     	
     	txtabdomen.addTextChangedListener(new TextWatcher() {
			
			
			
			public void afterTextChanged(Editable s) {
				DadosAlterados = true;
				
			}

			
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
				// TODO Auto-generated method stub				
			}
	
			public void onTextChanged(CharSequence s, int start, int before,
					int count) {
				// TODO Auto-generated method stub

			}
		});
	}
	
	
	public void retornaDataSistema(){
		
		TextView txtdatasistema = (TextView) findViewById(R.id.txtdatasistema);      
		String vDataSistema = str[3];
     	String vTexto = "Informação salva em: ";
     	
    	if (vDataSistema.equals("0")) {
     		txtdatasistema.setText(str[3].replace("0"," ")); }
     		else { 
     			String result = vTexto + vDataSistema;     			
     			txtdatasistema.setText(result);     			 
     			}
     	    	
	}
	
	public void ResultadoAntropometica(int mostra){
		LinearLayout lyt = (LinearLayout) findViewById(R.id.resultadoGlic);
		LinearLayout lytAbdomen = (LinearLayout) findViewById(R.id.resultadoAbd);
   		lyt.setVisibility(mostra);
   		lytAbdomen.setVisibility(mostra);
	}
	
	@Override
	protected void onResume() {
		super.onResume();
		    pesAntropometrica  = PSaudavelActivity.pessoa;
		    InicializaDados();
		    retornaDataSistema();

		Log.e("onResume", "Resume" );

	}
	
	public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.antropometrica);
    	Log.e("onCreate", "Create" );
    		CarregaDados();
    		 retornaDataSistema();
	};
	
	public void CalculoIMC(String pPeso, String pAltura){
		
		TextView txt = (TextView) findViewById(R.id.txtPAGlic_IMC);
				
                double peso =  Double.parseDouble(pPeso); 
                double altura = Double.parseDouble(pAltura) / 100; 
                
                double res = (peso / (altura * altura));
                   
                double pesoMinimo = 18.6 * (altura * altura);
                double pesoMaximo = 24.99 * (altura * altura);
                
                DecimalFormat dec = new DecimalFormat("#.00");
          
                String faixa = "Peso Ideal: " + String.valueOf(dec.format(pesoMinimo)) + " kg a " + String.valueOf(dec.format(pesoMaximo)) + " kg "   ;           

                ((TextView) findViewById(R.id.txtpesoideal_IMC)).setText(faixa);
          
                String informacao = "Ainda não calculado";               
             if (peso==0 && altura==0){
            	 res = 0;
             }
                if (res < 18.599) {
                    informacao = "ABAIXO DO PESO IDEAL";                    
                }
                if ((res >= 18.60) && (res < 25.00)) {
                    informacao = "PESO IDEAL";
                } 
                if ((res >= 25) && (res < 29.99)) {
                    informacao = "SOBRE PESO";
                }
                if ((res >= 30) && (res < 34.99)) {
                    informacao = "OBESO I";
                }
                if ((res >= 35) && (res < 39.99)) {
                    informacao = "OBESO II";
                }
                if (res >= 40) {
                    informacao = "OBESO III";
                }
               
           if (String.valueOf(res).length() < 5) {
        	   txt.setText(String.valueOf(res).substring(0, String.valueOf(res).length()) + " - " + informacao);
           }else{                
             	txt.setText(String.valueOf(res).substring(0, 5) + " - " + informacao);
           }               
	}
	
    public void CalculoABD(String pSexo){
			
		TextView txtpesoideal = (TextView) findViewById(R.id.txtPAGlic_abdomen); 	
		TextView txtresABD = (TextView) findViewById(R.id.txtPAGlic_resabdomen); 
               
                double res = Double.valueOf(String.valueOf(txtpesoideal.getText()).replace(",", "."));
                                 
                String informacao = "Ainda não calculado";
                
              if (pSexo.contains("F")){
            	  if (res <= 80){
            		  informacao = "NORMAL";       
            	  }else if (res > 80 && res < 88 ){
            		  informacao = "RISCO MODERADO";   
            	  }else if (res >= 88 ){
            		  informacao = "RISCO ALTO";   
            	  }
            	  
              }else{
            	  if (res <= 94){
            		  informacao = "NORMAL";       
            	  }else if (res > 94 && res < 102 ){
            		  informacao = "RISCO MODERADO";   
            	  }else if (res >= 102 ){
            		  informacao = "RISCO ALTO";   
            	  }
              }
            	  
             
              txtresABD.setText(String.valueOf(informacao));
               
	}
	
}